#!/bin/bash +x
# 开启调试模式，显示执行的命令

# 函数名: execTips
# 功能: 显示确认提示并根据用户输入决定是否继续执行
# 参数: $1 - 要显示的提示信息
# 返回值: 当用户输入Y/y/yes时返回1，其他输入则退出脚本
execTips() {
  # 显示提示信息，格式为"提示信息 [Y/n]"
  tips "$1 [Y/n]":

  # 读取用户输入
  read input

  # 根据用户输入判断是否继续执行
  case $input in

    [yY][eE][sS] | [yY])
      # 用户输入Y/y/yes，返回1表示继续执行
      return 1
      ;;
    *)
      # 用户输入其他内容，退出脚本
      exit 0
      ;;
  esac
}

# 函数名: logW
# 功能: 以黄色输出警告日志信息
# 参数: $1 - 要输出的日志信息
logW() {
  echo -e "\033[1;33m $1 \033[0m"
}

# 函数名: logE
# 功能: 以红色输出错误日志信息
# 参数: $1 - 要输出的日志信息
logE() {
  echo -e "\033[1;31m $1 \033[0m"
}

# 函数名: logS
# 功能: 以绿色输出成功日志信息
# 参数: $1 - 要输出的日志信息
logS() {
  echo -e "\033[1;32m $1 \033[0m"
}

# 函数名: getMySQLStatus
# 功能: 查询MySQL服务状态
# 返回值: 开启返回1，关闭返回0
getMySQLStatus() {
  # 获取MySQL服务状态
  status=$(systemctl status mysqld)

  # 检查状态中是否包含"active (running)"
  result=$(echo "$status" | grep "active (running)")

  # 根据检查结果返回相应状态码
  if [[ "$result" != "" ]]; then
    return 1  # MySQL正在运行
  else
    return 0  # MySQL未运行
  fi
}

# 函数名: getFirewalldStatus
# 功能: 查询防火墙服务状态
# 返回值: 开启返回1，关闭返回0
getFirewalldStatus() {
  # 获取防火墙服务状态
  status=$(systemctl status firewalld)

  # 检查状态中是否包含"active (running)"
  result=$(echo "$status" | grep "active (running)")

  # 根据检查结果返回相应状态码
  if [[ "$result" != "" ]]; then
    return 1  # 防火墙正在运行
  else
    return 0  # 防火墙未运行
  fi
}

# 函数名: checkSoft
# 功能: 检查软件是否安装，未安装则自动安装
# 参数: $1 - 软件名称
# 返回值: 已安装或安装成功返回1，安装失败则退出脚本
checkSoft() {
  # 检查软件是否已安装
  if [ "$(yum list installed | grep $1)" == "" ]; then
    # 软件未安装，提示并自动安装
    logE "检测到系统缺少执行所需的$1命令，自动开始安装..."
    sleep 2
    yum -y install $1
    # 检查安装是否成功
    if test $? -eq 0; then
      logS "$1环境安装完成!"
      return 1
    else
      logE "$1环境安装失败!请手动安装$1或重试！"
      exit 0
    fi
  else
    # 软件已安装
    return 1
  fi
}

# 函数名: checkYumRepoAndUpdate
# 功能: 检查并更新YUM源
checkYumRepoAndUpdate() {
  # 执行YUM更新
  yum -y update
  # 检查更新是否成功
  if test $? -eq 0; then
    logS "升级成功！"
  else
    logE "升级失败，请重试！"
  fi
}

# 函数名: switchYumRepoToAliYun
# 功能: 切换YUM源为阿里源
switchYumRepoToAliYun() {
  logS "开始备份原始yum源..."

  # 如果备份文件已存在则删除
  if [ -f "$YUM_OLD_REPO_BAK_FILE_PATH" ]; then
    rm $YUM_OLD_REPO_BAK_FILE_PATH
    logS "旧的备份已删除!"
  fi

  # 备份原始YUM源配置
  cp /etc/yum.repos.d/CentOS-Base.repo $YUM_OLD_REPO_BAK_FILE_PATH
  logS "备份完成，已将原始源备份至：${YUM_OLD_REPO_BAK_FILE_PATH}"
  sleep 1
  logS "开始拉取阿里源仓库..."
  # 下载阿里源配置文件
  wget -O /etc/yum.repos.d/CentOS-Base.repo $YUM_NEW_REPO_ALIYUN_URL

  # 检查下载是否成功
  if test $? -eq 0; then
    logS "阿里源拉取成功！"
    # 应用新配置
    logS "正在刷新应用..."
    yum makecache
    logS "切换成功！"
  else
    logE "阿里源拉取失败，请重试！"
  fi
}

# 函数名: switchYumRepoToWangyi
# 功能: 切换YUM源为网易源
switchYumRepoToWangyi() {
  logS "开始备份原始yum源..."

  if [ -f "$YUM_OLD_REPO_BAK_FILE_PATH" ]; then
    rm $YUM_OLD_REPO_BAK_FILE_PATH
    logS "旧的备份已删除!"
  fi

  cp /etc/yum.repos.d/CentOS-Base.repo $YUM_OLD_REPO_BAK_FILE_PATH
  logS "备份完成，已将原始源备份至：${YUM_OLD_REPO_BAK_FILE_PATH}"
  sleep 1
  logS "开始拉取网易源仓库..."
  wget -O /etc/yum.repos.d/CentOS-Base.repo $YUM_NEW_REPO_WY_URL

  if test $? -eq 0; then
    logS "网易源拉取成功！"
    # 应用设置
    logS "正在刷新应用..."
    yum makecache
    logS "切换成功！"
  else
    logE "网易源拉取失败，请重试！"
  fi
}

# 函数名: enableOrDisEnableFirewalld
# 功能: 开启或关闭防火墙服务
enableOrDisEnableFirewalld() {
  # 获取防火墙当前状态
  getFirewalldStatus

  # 判断防火墙状态并执行相应操作
  if [ $? -eq 1 ]; then
    # 防火墙开启状态，提醒是否关闭
    tips "检测到防火墙开启状态，是否关闭? 输入Y关闭,输入N取消 [Y/n]:"
    read -r isClose

    case $isClose in
      [yY][eE][sS] | [yY])
        # 用户选择关闭防火墙
        systemctl stop firewalld
        if [ $? -eq 0 ]; then
          logS "防火墙关闭成功！"
        else
          logE "防火墙关闭失败！"
        fi

        ;;

      *)
        # 用户选择取消操作
        exit 0
        ;;
    esac

  else
    # 防火墙关闭状态，提醒是否开启
    tips "检测到防火墙关闭状态，是否开启? 输入Y开启,输入N取消 [Y/n]:"
    read -r isOpen

    case $isOpen in
      [yY][eE][sS] | [yY])
        # 用户选择开启防火墙
        systemctl start firewalld
        if [ $? -eq 0 ]; then
          logS "防火墙开启成功！"
        else
          logE "防火墙开启失败！"
        fi
        ;;

      *)
        # 用户选择取消操作
        exit 0
        ;;
    esac

  fi
}

# 函数名: tips
# 功能: 以洋红色显示提示信息，不换行
# 参数: $1 - 要显示的提示信息
tips() {
  # 以洋红色显示提示信息，不换行
  echo -e -n "\033[1;35m$1\033[0m"
}

# 函数名: getOpenedFirewallPorts
# 功能: 查看全部开放的防火墙端口
getOpenedFirewallPorts() {
  # 获取所有开放的端口
  openedPorts=$(firewall-cmd --list-port)

  # 遍历并输出每个开放的端口
  for portStr in $openedPorts; do
    echo "$portStr"
  done
}

# 函数名: openOrCloseFirewallPort
# 功能: 开启或关闭指定端口
# 参数1: 0关闭 1开启
# 参数2: 端口号
# 参数3: 协议名称，如tcp、udp等
openOrCloseFirewallPort() {
  # 查询指定端口状态
  selectPortStatus "$2" "$3"

  isOpen=$?

  # 根据操作类型执行相应动作
  if [ "$1" == 0 ]; then
    # 关闭指定端口
    if [ $isOpen == 0 ]; then
      logE "${2}端口处于未放行状态，请勿重复关闭"
      exit 0
    fi
    logS "正在关闭$2端口..."
    firewall-cmd --zone=public --remove-port="${2}"/"${3}" --permanent
    if [ $? == 0 ]; then
      firewall-cmd --reload
      logS "$2/$3端口关闭成功"
    else
      logE "$2/$3端口关闭失败"
    fi
  fi

  if [ $1 == 1 ]; then
    # 开启指定端口
    if [ $isOpen == 1 ]; then
      logE "${2}端口处于已放行状态，请勿重复放行！"
      exit 0
    fi
    logS "正在开启${2}/${3}端口..."
    firewall-cmd --zone=public --add-port="$2"/"$3" --permanent
    if [ $? == 0 ]; then
      firewall-cmd --reload
      logS "$2/$3端口开启成功"
    else
      logE "$2/$3端口开启失败"
    fi
  fi
}

# 函数名: selectPortStatus
# 功能: 查询指定端口是否开放
# 参数1: 端口号
# 参数2: 协议
# 返回值: 开放返回1，未开放返回0
selectPortStatus() {
  # 获取防火墙状态
  getFirewalldStatus

  # 如果防火墙开启则查询端口状态
  if [ $? == 1 ]; then
    status=$(firewall-cmd --query-port=$1/$2)
    if [ $? == 0 ]; then
      if [ $status == "yes" ]; then
        return 1  # 端口已开放
      else
        return 0  # 端口未开放
      fi
    fi
  else
    return 1  # 防火墙未开启时默认返回已开放
  fi
}

# 函数名: fun4
# 功能: 开启/关闭指定端口（功能4）
fun4() {
  # 开启关闭指定端口
  tips "请输入要操作的端口："
  read port

  # 验证端口输入是否合法
  if [[ $port -gt 65535 ]] || [[ $port -le 0 ]]; then
    logE "端口输入有误，范围1~65535"
    exit 0
  fi

  tips "请输入要操作的端口协议(默认为tcp，直接敲回车使用默认协议)："
  read inputChell

  # 如果未输入协议，默认使用tcp
  if test -z $inputChell; then
    inputChell="tcp"
  fi

  tips "请输入操作类型(0关闭,1开启):"
  read doType

  # 根据操作类型执行相应函数
  case $doType in
    [0] | [1])
      openOrCloseFirewallPort $doType $port $inputChell
      ;;
    *)
      logE "操作类型输入有误，0关闭，1开启"
      exit 0
      ;;
  esac
}

# 函数名: fun5
# 功能: 查询指定端口运行状态（功能5）
fun5() {
  tips "请输入要查询的端口："
  read port

  # 验证端口输入是否合法
  if [[ $port -gt 65535 ]] || [[ $port -le 0 ]]; then
    logE "端口输入有误，范围1~65535"
    exit 0
  fi

  # 检查lsof软件是否安装
  checkSoft "lsof"

  # 查询端口运行状态
  lsof -i:$port
}

# 函数名: fun6
# 功能: 杀死指定端口（功能6）
fun6() {
  tips "请输入要杀死的端口："
  read port

  # 验证端口输入是否合法
  if [[ $port -gt 65535 ]] || [[ $port -le 0 ]]; then
    logE "端口输入有误，范围1~65535"
    exit 0
  fi

  # 获取指定端口的进程ID
  processID=$( (netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'))

  # 如果未找到进程ID，则提示未找到
  if test -z "$processID"; then
    logE "未找到$port,请确认该端口是否已经启动并运行后再试！"
  else
    # 杀死指定进程
    kill -9 $processID
    if [ $? == 0 ]; then
      logS "操作成功！${port}端口已杀死！"
    else
      logE "操作失败！${port}端口杀死失败,请重试！"
    fi
  fi
}

# 函数名: progressfilt
# 功能: 下载进度处理
progressfilt() {
  local flag=false c count cr=$'r' nl=$'n'
  while IFS='' read -d '' -rn 1 c; do
    if $flag; then
      printf '%s' "$c"
    else
      if [[ $c != $cr && $c != $nl ]]; then
        count=0
      else
        ((count++))
        if ((count > 1)); then
          flag=true
        fi
      fi
    fi
  done
}

# 函数名: installAsktaoMySQL
# 功能: 安装问道数据库，自动设置编码+最大连接数，自动执行问道所需脚本（带网关数据库一起执行）
installAsktaoMySQL() {

  checkSoft wget

  logS "安装MySQL5.7稳定版..."

  rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
  logS "下载mysql安装包..."

  wget -c http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  logS "安装mysql依赖..."
  yum localinstall -y mysql57-community-release-el7-11.noarch.rpm
  logS "安装mysql社区服务器..."
  yum -y install mysql-community-server
  if [ $? -ne 0 ]; then
    logE "安装失败,请重试!"
    logE "回滚...移除MySQL..."
    unInstallMysql
    exit 0
  fi
  logS "修改mysql配置文件..."
  sed -i '$a\federated' /etc/my.cnf
  sed -i '$a\max_connections = 20000' /etc/my.cnf
  sed -i '$a\max_allowed_packet = 64M' /etc/my.cnf

  #  sed -i '$a\skip-grant-tables=1' /etc/my.cnf
  sed -i '$a\character_set_server=latin1' /etc/my.cnf
  sed -i '$a\collation-server=latin1_swedish_ci' /etc/my.cnf
  sed -i '$a\sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' /etc/my.cnf
  sed -i '$a\log_timestamps=SYSTEM' /etc/my.cnf

  sed -i '$a\[client]' /etc/my.cnf
  sed -i '$a\default-character-set=latin1' /etc/my.cnf
  sed -i '$a\[mysql]' /etc/my.cnf
  sed -i '$a\default-character-set=latin1' /etc/my.cnf

  sed -i "/\[mysqld\]/a\\port=$dbPort" /etc/my.cnf
  sed -i "/\[client\]/a\\port=$dbPort" /etc/my.cnf

  /usr/sbin/setenforce 0
  logS "设置mysql开机启动..."
  systemctl enable mysqld

  logS "启动mysql..."
  systemctl start mysqld

  if [ $? -ne 0 ]; then
    logE "启动失败,请重试!"
    logE "回滚...移除MySQL..."
    unInstallMysql
    exit 0
  fi

  #查询默认密码
  defaulrpsw="$(grep "password is generated" /var/log/mysqld.log | awk '{print $NF}')"
  logS "设置用户名密码..."

  mysql --connect-expired-password -uroot -p$defaulrpsw >/dev/null 2>&1 <<EOF
    set global validate_password_policy=0;set global validate_password_mixed_case_count=0;set global validate_password_number_count=3;set global validate_password_special_char_count=0;set global validate_password_length=3;set password=password("$dbPassword");flush privileges;
EOF

  mysql --connect-expired-password -uroot -p$dbPassword >/dev/null 2>&1 <<EOF
    select user,host from mysql.user;update mysql.user set host='%' where user='root' and host='localhost';flush privileges;
EOF

  logS "写入问道数据库..."
  mysql -uroot -P${dbPort} -p${dbPassword} <$asktaoSQLPATH >/dev/null 2>&1

  if [ $? -ne 0 ]; then
    logE "导入数据库失败，请确认${asktaoSQLPATH}是否存在！"
    logE "回滚...移除MySQL..."
    unInstallMysql
    exit 0
  fi

  logS "分配资源..."
  sed -i '$a\* hard nofile 65535' /etc/security/limits.conf
  sed -i '$a\* soft nofile 65535' /etc/security/limits.conf

  sed -i '$a\ulimit -SHn 65535' /etc/profile
  source /etc/profile

  sed -i '$a\LimitNOFILE=65535' /usr/lib/systemd/system/mysqld.service
  sed -i '$a\LimitNPROC=65535' /usr/lib/systemd/system/mysqld.service

  logS "重启mysql..."
  systemctl daemon-reload

  sed -i "s/skip-grant-tables=1//g" /etc/my.cnf

  systemctl restart mysqld

  if [ $? -ne 0 ]; then
    logE "启动失败,请重试!"
    logE "回滚...移除MySQL..."
    unInstallMysql
    exit 0
  fi

  getFirewalldStatus

  if [ $? == 0 ]; then
    logS "防火墙关闭状态，跳过端口放行步骤..."
  else
    logS "检测并开放端口..."
    selectPortStatus "$dbPort" tcp

    if [ $? == 0 ]; then
      openOrCloseFirewallPort 1 "$dbPort" tcp
      logS "端口$dbPort已放行"
    fi
  fi

  echo "logEnable=0" >/var/log/asktao.cnf

  rm -rf $asktaoSQLPATH

  deleteKXMySQLUser
  printInstallMysqlLog




}

printInstallMysqlLog() {
  logW "
===================请记录数据库资料===================
端口：$dbPort 
用户名：root 
密码：$dbPassword 
配置文件路径：$MYSQL_CONFIG_FILEPATH 

===================请记录数据库资料===================
"
}

deleteKXMySQLUser() {
  mysql -uroot -P$dbPort -p$dbPassword -e "use mysql; DROP USER ''@'kuaixun-5kyuy'; DROP USER 'root'@'kuaixun-5kyuy';flush privileges;" > /etc/null 2>&1
}

# 函数名: unInstallMysql
# 功能: 卸载MySQL
unInstallMysql() {

  getMySQLStatus

  if [ $? == 1 ]; then
    logS "停止MySQL..."
    systemctl stop mysqld
  fi

  sed -i '/* hard nofile 65535/d' /etc/security/limits.conf
  sed -i '/* soft nofile 65535/d' /etc/security/limits.conf

  sed -i '/ulimit -SHn 65535/d' /etc/profile

  sed -i '/LimitNOFILE=65535/d' /usr/lib/systemd/system/mysqld.service
  sed -i '/LimitNPROC=65535/d' /usr/lib/systemd/system/mysqld.service

  logS "查找MySQL所有目录..."
  nL="$(rpm -qa | grep -i mysql)"

  for soft in ${nL[@]}; do
    rpm -ev $soft --nodeps
    logS "移除:${soft}"
  done

  nM="$(rpm -qa | grep -i mariadb)"

  for sm in ${nM[@]}; do
    rpm -ev $sm --nodeps
    logS "移除:${sm}"
  done

  fL=$(find / -name mysql)

  for fs in ${fL[@]}; do
    rm -rf $fs
    logS "移除:${fs}"
  done

  logS "移除配置文件!"
  rm -rf /etc/my.cnf
  rm -rf /var/log/mysqld.log
  logS "删除成功!"
}

# 函数名: reRunOnlyPort
# 功能: 重跑指定线路
reRunOnlyPort() {

  for index in $(seq 1 ${#killGameLinePort[@]}); do

    if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then
      logW "$index) GM线 - ${killGameLinePort[index - 1]}"
    else
      logS "$index) $index线 - ${killGameLinePort[index - 1]}"
    fi

  done

  logS "\n"
  tips "请输入操作的线路编号(eg:1)："
  read inputIndex

  if [ -z "$inputIndex" ]; then
    logE "输入错误！"
    exit 0
  fi

  if [ $inputIndex -le 0 ]; then
    logE "输入错误！"
    exit 0
  fi

  if [ $inputIndex -gt ${#killGameLinePort[@]} ]; then
    logE "输入线路超出可用线路，请重新输入!"
    exit 0
  fi

  for index in $(seq 1 ${#killGameLinePort[@]}); do
    if [ $inputIndex == $index ]; then

      if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then

        logS "关闭GM线..."
        processID=$( (netstat -nlp | grep :${killGameLinePort[index - 1]} | awk '{print $7}' | awk -F"/" '{ print $1 }'))
        if ! test -z "$processID"; then
          kill -9 $processID &
        fi

        sleep 1

        logS "..."

        logS "启动GM线..."

        cd $basePath/gm/ && echo i | ./rungm >$basePath/log/line_gm.log 2 >&1 &

        logS "线路正在后台加载，请开启脚本后使用'c5'查询线路实时状态..."

      else
        logS "关闭$index线..."
        processID=$( (netstat -nlp | grep :${killGameLinePort[index - 1]} | awk '{print $7}' | awk -F"/" '{ print $1 }'))
        if ! test -z "$processID"; then
          kill -9 $processID &
        fi

        sleep 1

        logS "..."

        logS "启动$index线..."

        cd $basePath/gs/ && echo i | ./$index >$basePath/log/line_$index.log 2 >&1 &

        logS "线路正在后台加载，请开启脚本后使用'c5'查询线路实时状态..."
      fi

    fi

  done

}

# 函数名: reRunLine
# 功能: 重新跑线
reRunLine() {

  for port in ${killGameLinePort[@]}; do
    processID=$( (netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'))
    if ! test -z "$processID"; then
      kill -9 $processID &
    fi
  done

  startGameLine
}

runCheckLine() {

  logS "开始为您后台不间断查询线路实时状态，启动成功的线路将输出，如需结束请按下Ctrl+C键！"

  startedLineArr=()

  while [ true ]; do
    for index in $(seq 1 ${#killGameLinePort[@]}); do
      processID=$( (netstat -nlp | grep :${killGameLinePort[index - 1]} | awk '{print $7}' | awk -F"/" '{ print $1 }'))
      if ! test -z "$processID"; then

        isAbout=0
        for linePort in ${startedLineArr[@]}; do
          if [ "$linePort" == "${killGameLinePort[index - 1]}" ]; then
            isAbout=1
            break
          else
            isAbout=0
          fi
        done

        if [ $isAbout == 0 ]; then
          startedLineArr[$index]="${killGameLinePort[index - 1]}"

          if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then
            logS "GM线启动成功！"
          else
            logS "${index}线启动成功！"
          fi

        fi

      fi
    done

    if [ ${#startedLineArr[@]} == ${#killGameLinePort[@]} ]; then
      logS "线路已全部启动成功！后台任务自动结束！"
      exit 0
    fi
  done
}

# 函数名: startGameLine
# 功能: 启动线路
startGameLine() {

  for index in $(seq 1 ${#killGameLinePort[@]}); do

    if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then
      logS "后台启动GM线(${killGameLinePort[index - 1]})..."
      cd $basePath/gm/ && echo i | ./rungm >$basePath/log/line_gm.log 2 >&1 &
      logW "..."
      sleep 1
    else
      logW "后台启动$index线(${killGameLinePort[index - 1]})..."
      cd $basePath/gs/ && echo i | ./$index >$basePath/log/line_$index.log 2 >&1 &
      #cd /asktao/gm/ && echo i | ./gm >/asktao/log/line_gm.log 2 >&1 &
      logW "..."
      sleep 1
      logW "..."
      sleep 1
      logW "..."
      sleep 1
    fi
  done

  logS "线路正在后台启动，随时可使用脚本键入'C5'查询线路实时状态..."

  execTips "是否开启自动查线？"

  runCheckLine

}

# 函数名: startGameService
# 功能: 启动游戏服务器 内部调用
startGameService() {
  logS "服务超时时间为60秒，超时后请至日志目录查看日志。启动AAA服务需要在关闭游戏服务后等待大约20秒，否则无法启动！"
  sleep 1
  logS "加载驱动..."

  isEnableLog

  logEnable=$?

  if [ $logEnable == 0 ]; then
    #关闭状态
    cd /asktao/1/ && echo i | ./1 >/asktao/log/drive.log 2 >&1 &
  else
    cd /asktao/1/ && echo i | ./1 &
  fi

  sleep 1
  logS "驱动已加载，开始启动游戏服务器..."
  sleep 1

  for index in $(seq 1 ${#killPorts[@]}); do

    if test $index -eq 1; then
      logS "启动AAA服务..."

      if [ $logEnable == 0 ]; then
        #关闭状态
        cd $basePath/aaa/ && echo i | ./runaaa >$basePath/log/aaa.log 2 >&1 &
      else
        cd $basePath/aaa/ && echo i | ./runaaa &
      fi

    fi

    if test $index -eq 2; then
      logS "启动DBA服务..."

      if [ $logEnable == 0 ]; then
        #关闭状态
        cd $basePath/dba/ && echo i | ./rundba >$basePath/log/dba.log 2 >&1 &
      else
        cd $basePath/dba/ && echo i | ./rundba &
      fi

    fi

    if test $index -eq 3; then
      logS "启动CCS服务..."

      if [ $logEnable == 0 ]; then
        #关闭状态
        cd $basePath/ccs/ && echo i | ./runccs >$basePath/log/ccs.log 2 >&1 &
      else
        cd $basePath/ccs/ && echo i | ./runccs &
      fi

    fi

    if test $index -eq 4; then
      logS "启动CSA服务..."

      if [ $logEnable == 0 ]; then
        #关闭状态
        cd $basePath/csa/ && echo i | ./runcsa >$basePath/log/csa.log 2 >&1 &
      else
        cd $basePath/csa/ && echo i | ./runcsa &
      fi

    fi

    processID=
    for loop in {1..60}; do
      processID=$( (netstat -nlp | grep :${killPorts[$index - 1]} | awk '{print $7}' | awk -F"/" '{ print $1 }'))
      if test -z "$processID"; then
        #端口没起来。继续等待，改为去扫对应的日志文件，如果发现

        if test $index -eq 1; then
          #AAA还没起来
          if [ $logEnable == 0 ]; then
            #关闭状态
            aaaStatus=$(sed -n "/AAA failed to listen on port: ${killPorts[$index - 1]}/p" $basePath/log/aaa.log)

            if [ -n "$aaaStatus" ]; then
              logE "AAA启动失败，端口占用!正在后台杀死中，请等待大约20秒左右再试。Tips小技巧：加入游戏开机自启动(C6)后重启系统(A8)可能只需要10秒就OK啦~并且开机后自动重跑服务器和线路~"
              echo "" >$basePath/log/aaa.log
              exit 0
            fi
          fi

        fi

        logS "..."
        sleep 1
      else
        break
      fi
    done

    #循环结束后如果对应的端口没起来，表示启动失败，杀死全部端口

    if test -z "$processID"; then
      if test $index -eq 1; then

        if [ $logEnable == 0 ]; then
          #关闭状态
          logE "AAA服务启动失败!对应端口${killPorts[$index - 1]}"
        else
          logE "AAA服务启动失败!对应端口${killPorts[$index - 1]},日志文件路径：$basePath/log/aaa.log，请打开日志文件并查看日志最后位置输出的错误内容！"
        fi

        #因为AAA为第一个端口，启动失败时无需杀死端口
      fi

      if test $index -eq 2; then

        if [ $logEnable == 0 ]; then
          #关闭状态
          logE "DBA服务启动失败!对应端口${killPorts[$index - 1]}"
        else
          logE "DBA服务启动失败!对应端口${killPorts[$index - 1]},日志：$basePath/log/dba.log，请打开日志文件并查看日志最后位置输出的错误内容！"
        fi

        echo "${killPorts[0]}" | fun6

      fi

      if test $index -eq 3; then

        if [ $logEnable == 0 ]; then
          #关闭状态
          logE "CCS服务启动失败!对应端口${killPorts[$index - 1]}"
        else
          logE "CCS服务启动失败!对应端口${killPorts[$index - 1]},日志：$basePath/log/ccs.log，请打开日志文件并查看日志最后位置输出的错误内容！"
        fi
        echo "${killPorts[0]}" | fun6
        echo "${killPorts[1]}" | fun6

      fi

      if test $index -eq 4; then
        if [ $logEnable == 0 ]; then
          #关闭状态
          logE "CSA服务启动失败!对应端口${killPorts[$index - 1]}"
        else
          logE "CSA服务启动失败!对应端口${killPorts[$index - 1]},日志：$basePath/log/csa.log，请打开日志文件并查看日志最后位置输出的错误内容！"
        fi

        echo "${killPorts[0]}" | fun6
        echo "${killPorts[1]}" | fun6
        echo "${killPorts[2]}" | fun6

      fi

      exit 0
    fi

    #如果没有进入上个分支，代表端口不是空的启动成功了
    if test $index -eq 1; then
      logS "AAA服务(${killPorts[$index - 1]})启动成功！"
    fi

    if test $index -eq 2; then
      logS "DBA服务(${killPorts[$index - 1]})启动成功！"
    fi

    if test $index -eq 3; then
      logS "CCS服务(${killPorts[$index - 1]})启动成功！"
    fi

    if test $index -eq 4; then
      logS "CSA服务(${killPorts[$index - 1]})启动成功！"
    fi

    sleep 1
  done

  startGameLine
}

killGameServer() {

  processID=
  for port in ${killPorts[@]}; do
    processID=$( (netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'))
    if ! test -z "$processID"; then
      kill -9 $processID &
    fi
  done

  logS "游戏服务已关闭！"

  for port in ${killGameLinePort[@]}; do
    processID=$( (netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'))
    if ! test -z "$processID"; then
      kill -9 $processID &
    fi
  done

  logS "所有线路已关闭！正在后台关闭游戏服务器，需要等待20秒左右即可再次启动游戏服务器！如果有异常日志出现时敲回车即可！"

}

# 函数名: startAskTaoServer
# 功能: 启动问道服务器
startAskTaoServer() {
  if [ ! -f $basePath/$zipFileNmae ]; then
    startGameService
  else
    #开放端口
    for port in ${killPorts[@]}; do
      selectPortStatus $port tcp

      if [ $? == 0 ]; then
        openOrCloseFirewallPort 1 "$port" tcp
      fi

    done

    for port in ${killGameLinePort[@]}; do

      selectPortStatus $port tcp

      if [ $? == 0 ]; then
        openOrCloseFirewallPort 1 "$port" tcp
      fi
    done

    logS "检测压缩软件"
    checkSoft unzip

    if [ $? == 1 ]; then
      unzip -o $basePath/$zipFileNmae -d $basePath/
      chmod -R 777 $basePath/

      checkSoft "xulrunner.i686"

      if [ $? == 1 ]; then

        rm -rf $basePath/$zipFileNmae
        #创建日志文件夹

        if [ ! -d "$basePath/log" ]; then
          mkdir $basePath/log
        fi

        startGameService
      fi
    fi

  fi
}

# 函数名: asktaoStatus
# 功能: 服务器状态
asktaoStatus() {
  #服务器状态查询
  for index in $(seq 1 ${#killPorts[@]}); do
    port=${killPorts[index - 1]}
    processID=$( (netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'))
    if test -z "$processID"; then
      case $index in
        1)
          logE "AAA服务异常($port),玩家可能卡登录验证！请查阅日志$basePath/log/aaa.log"
          ;;
        2)
          logE "DBA服务异常($port),请查阅日志$basePath/log/dba.log"
          ;;
        3)
          logE "CCS服务异常($port),请查阅日志$basePath/log/ccs.log"
          ;;
        4)
          logE "CSA服务异常($port),请查阅日志$basePath/log/csa.log"
          ;;
      esac
    else
      case $index in
        1)
          logS "AAA服务正常($port)"
          ;;
        2)
          logS "DBA服务正常($port)"
          ;;
        3)
          logS "CCS服务正常($port)"
          ;;
        4)
          logS "CSA服务正常($port)"
          ;;
      esac
    fi

  done

  #线路状态查询
  for index in $(seq 1 ${#killGameLinePort[@]}); do
    processID=$( (netstat -nlp | grep :${killGameLinePort[index - 1]} | awk '{print $7}' | awk -F"/" '{ print $1 }'))
    if test -z "$processID"; then

      if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then
        logE "${killGameLinePort[index - 1]}端口异常,GM线还未成功启动！"
      else
        logE "${killGameLinePort[index - 1]}端口异常,${index}线玩家可能无法正常登录游戏！如果刚跑完线无需关心，稍等片刻即可恢复启动完成！"
      fi

    else

      if [ $ENABLE_GM_LINE == 1 ] && [ $index == ${#killGameLinePort[@]} ]; then
        logS "GM线正常(${killGameLinePort[index - 1]})，所有玩家可正常进出游戏！"
      else
        logS "${index}线正常(${killGameLinePort[index - 1]})，所有玩家可正常进出游戏！"
      fi

    fi

  done

}

systemInfo() {
  productName=$(dmidecode | grep Product | sed 's/^[ \t]*//g')
  echo -e "\033[32;49;1m [服务器型号] \033[39;49;0m"
  echo -e "$productName"

  echo -e "\033[32;49;1m [系统版本] \033[39;49;0m"
  echo -e "$(cat $SYSTEM_INFO_FILE_CONFIG_PATH)"

  coreVersion=$(uname -r)
  echo -e "\033[32;49;1m [内核版本] \033[39;49;0m"
  echo -e "$coreVersion"

  logicalNum=$(cat /proc/cpuinfo | grep "processor" | wc -l)
  pysicalNum=$(cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l)
  pysicalCoreNum=$(cat /proc/cpuinfo | grep "cpu cores" | uniq | awk '{print $4}')
  otherInfo=$(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c | awk '{print $2,$3,$7}')
  firstCache=$(cat /sys/devices/system/cpu/cpu0/cache/index0/size)
  let coreTotal=pysicalNum*pysicalCoreNum
  echo -e "\033[32;49;1m [cpu信息] \033[39;49;0m"
  echo -e "$(getconf LONG_BIT)位，物理$coreTotal核($pysicalNum X $pysicalCoreNum)，逻辑$logicalNum核，$otherInfo，一级缓存$firstCache"

  memSize=$(free -m | grep Mem | awk '{print $2}')
  swapSize=$(free -m | grep Swap | awk '{print $2}')
  echo -e "\033[32;49;1m [内存信息] \033[39;49;0m"
  echo -e "内存：$memSize Mb，交换分区：$swapSize Mb"

  diskInfo=$(fdisk -l | grep "Disk /dev/sd" | tr "," ":" | awk -F ":" '{print $1,$2}')
  echo -e "\033[32;49;1m [硬盘信息] \033[39;49;0m"
  echo -e "$diskInfo"

  echo -e "\033[32;49;1m [网卡信息] \033[39;49;0m"
  for i in $(ifconfig | egrep -E "em|eth" | grep -v Interrupt | awk '{print $1}'); do
    echo -e "\033[33;49;1m$i  \033[39;49;0m$(ethtool $i | egrep -E "Speed|Duplex" | sed "s/^[ \t]//g" | sed -re '1,${N;s/\n/ /}')"
  done

}

resetBockName() {
  execTips "请关闭游戏服务后再试，防止出错，是否继续？"

  logS "查询原区组信息..."
  #查询原区组名称
  oldBockNamesStr="$(mysql -uroot -P${dbPort} -p${dbPassword} --default-character-set=latin1 -e "select dist from dl_adb_all.server")" >/dev/null 2>&1

  array=(${oldBockNamesStr//"\n"/ })

  oldBlockName=${array[1]}

  if [ -z $oldBlockName ]; then
    logE "原区组信息查询失败，请重试！"
    exit 0
  fi

  echo -n "请输入新的区组名称："
  read newBlockName

  if [ -z $newBlockName ]; then
    logE "新区组名称不能为空，请重试！"
    exit 0
  fi

  execTips "是否将原区组'${oldBlockName}'修改为：'$newBlockName'?"

  getMySQLStatus
  if [ $? -eq 1 ]; then
    #导出全部数据库到sql
    logS "导出sql到临时文件..."
    mysqldump --opt --default-character-set=latin1 --databases dl_adb_all dl_ddb_1 dl_dmdb_1 dl_ldb_1 dl_ldb_all dl_mdb_1 dl_mdb_all dl_tdb_1 wdsf >/all_db.sql
    if [ $? -ne 0 ]; then
      logE "数据库导出失败!"
      exit 0
    fi

    logS "导出完成，开始修改..."

    sed -i "s/${oldBlockName}/$newBlockName/g" /all_db.sql

    logS "修改成功，正在导入MySQL..."

    mysql </all_db.sql >/dev/null

    if [ $? -ne 0 ]; then
      logE "导入失败，请重试！"
      exit 0
    fi

    logS "清理临时文件..."

    rm -rf /all_db.sql

    logS "导入成功，请重启游戏服务！"
  else
    logE "数据库未启动，请启动后再试！"
  fi
}

addAutoStartContent() {
  echo "#!/bin/bash +x
  echo '将在5秒后启动游戏服务器...'
  echo '...'
  sleep 1
  echo '...'
  sleep 1
  echo '...'
  sleep 1
  echo '...'
  sleep 1
  echo '11111'>>/aaa
 echo c1 | sh /usr/bin/wd
" >/usr/bin/autoStartAsktao

  echo 'sh /usr/bin/autoStartAsktao' >>/etc/rc.local

  chmod 0777 /usr/bin/autoStartAsktao
  logS "添加成功，将在系统重启后自动为您启动游戏服务器！"
}

addGameStartedBySystemRestart() {

  isAdd="$(grep "sh /usr/bin/autoStartAsktao" /etc/rc.local)"

  if test -z "$isAdd"; then
    execTips "是否加入开机自启动？"
    addAutoStartContent
  else
    execTips "是否取消开机启动？"
    a="sh /usr/bin/autoStartAsktao"
    sed -ie '/a/d' /etc/rc.local
  fi

}

# 函数名: editMySQLConfig
# 功能: 编辑mysql配置文件
editMySQLConfig() {
  execTips "操作提示：编辑请输入i,退出不保存请按下ESC然后输入:q,编辑后保存并退出请按下ESC然后输入:wq，是否继续操作配置文件?"
  vi /etc/my.cnf
}

# 函数名: shellOnStart
# 功能: 脚本执行入口
shellOnStart() {

  printStartLog

  tips "请输入有效的操作编号(A1~C5):"
  read doType

  case $doType in

    A1 | a1)
      #检测并更新YUM源
      execTips "是否更新yum源?"
      checkYumRepoAndUpdate
      ;;

    A2 | a2)
      #开启或关闭防火墙
      enableOrDisEnableFirewalld
      ;;

    A3 | a3)
      #开启或关闭防火墙
      getOpenedFirewallPorts
      ;;

    A4 | a4)
      #开放/关闭指定端口
      fun4
      ;;

    A5 | a5)
      #端口是否开放查询
      fun5
      ;;

    A6 | a6)
      #杀死指定端口
      fun6
      ;;

    A7 | a7)
      #切换yum源为阿里源
      execTips "是否切换yum源到阿里源?"
      switchYumRepoToAliYun
      ;;

    A8 | a8)
      #切换yum源为阿里源
      execTips "是否重启系统?"
      reboot
      ;;
    A9 | a9)
      #查询系统配置
      systemInfo
      ;;

    A10 | a10)
      #切换yum源为网易源
      execTips "是否切换yum源到网易源?"
      switchYumRepoToWangyi
      ;;

    A11 | a11)
      #查询服务器磁盘空间
      df -hl
      ;;

    A12 | a12)
      #查询内存使用情况
      free -h
      ;;

    A13 | a13)
      #查询服务器运行时长
      cat /proc/uptime | awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行：%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
      logS ""
      ;;
    B1 | b1)
      #安装问道专属MySQL
      execTips "是否开始安装问道数据库?"
      installAsktaoMySQL
      ;;

    B2 | b2)
      execTips "是否删除数据库?"
      unInstallMysql
      ;;

    B3 | b3)
      mysql -uroot -pbetavip -e "show status like 'Threads%'; " --connect-expired-password 2>/dev/null
      ;;

    B4 | b4)
      execTips "是否删除快讯云数据库用户?"
      deleteKXMySQLUser
      ;;
    B5 | b5)
      #查询MYSQL状态
      getMySQLStatus
      if [ $? -eq 1 ]; then
        logS "数据库开启状态!"
      else
        logE "数据库未运行！"
      fi
      ;;
    B6 | b6)
      systemctl restart mysqld
      ;;
    B7 | b7)
      systemctl stop mysqld
      ;;
    B8 | b8)
      #启动MySQL
      systemctl start mysqld
      ;;

    B9 | b9)
      #修复操作频繁异常
      execTips "是否修复服务器繁忙的错误，如果没有该错误请勿继续，否则可能出现异常，是否继续？"
      getMySQLStatus
      if [ $? -eq 1 ]; then
        logS "正在停止MySQL..."
        systemctl stop mysqld
        logS "停止成功，开始修复..."
        sed -i '/sql_mode=/c sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' $MYSQL_CONFIG_FILEPATH
        sed -i '/sql-mode=/c sql-mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' $MYSQL_CONFIG_FILEPATH
        logS "修复成功，正在启动MySQL..."
        systemctl start mysqld
        logS "MySQL启动成功！"
      else
        logS '正在启动MySQL...'
        systemctl start mysqld
        logS "MySQL启动成功！"
      fi
      ;;

    B10 | b10)
      #修改区组名称
      resetBockName
      ;;

    B11 | b11)
      #编辑配置文件
      editMySQLConfig
      ;;

    C1 | c1)
      #启动游戏服务器
      startAskTaoServer
      ;;

    C2 | c2)
      #停止游戏服务器
      execTips "是否停止游戏服务器?"
      killGameServer
      ;;

    C3 | c3)
      #重跑线路
      execTips "是否重跑所有线路?"
      reRunLine
      ;;

    C4 | c4)
      #重跑指定线路
      reRunOnlyPort
      ;;

    C5 | c5)
      #查询服务器状态
      asktaoStatus
      ;;

    C6 | c6)
      #游戏服务自启动
      addGameStartedBySystemRestart
      ;;

    C7 | c7)
      #线路实时状态
      runCheckLine
      ;;

    C8 | c8)

      #开启关闭日志

      isEnableLog

      if [ $? == 0 ]; then
        execTips "是否开启日志打印？"
        echo "logEnable=1" >/var/log/asktao.cnf
      else
        execTips "是否关闭日志打印？"
        echo "logEnable=0" >/var/log/asktao.cnf
      fi

      ;;

    *)
      logE "输入错误！"
      ;;
  esac
}

isEnableLog() {
  status=$(sed -n '/logEnable=1/p' /var/log/asktao.cnf)
  if [ -z $status ]; then
    return 0
  else
    return 1
  fi

}

# 函数名: printStartLog
# 功能: 输出提示语
printStartLog() {

  echo -e "
\033[1;31m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\033[0m
\033[1;31m┃\033[0m                                          \033[1;34m欢迎使用小强Linux工具箱 系统版本：$systemVersionName\033[0m                                               \033[1;31m┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\033[0m
\033[1;31m┃\033[0m      \033[1;31m系统相关\033[0m       \033[1;31m┃\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┛\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┃     A1) 检测并更新yum源          A2) 开启关闭防火墙           A3) 查看防火墙开放端口列表         A4) 开放/关闭指定端口       ┃\033[0m
\033[1;31m┃     A5) 端口是否运行查询         A6) 杀死指定端口             A7) 设置yum源至阿里                A8) 重启Linux系统           ┃\033[0m
\033[1;31m┃     A9) 查询服务器配置          A10) 设置yum源至网易         A11) 查询磁盘空间                  A12) 查询内存使用情况        ┃\033[0m
\033[1;31m┃    A13) 查询服务器运行时长                                                                                                   \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\033[0m
\033[1;31m┃\033[0m      \033[1;36mMySQL相关 \033[0m     \033[1;31m┃\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┛\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┃ \033[1;36m   B1) 安装问道专属MySQL        B2) 卸载MySQL                B3) 实时链接数查看                 B4) 删除快讯云MySQL用户\033[0m      \033[1;31m┃\033[0m
\033[1;31m┃ \033[1;36m   B5) 查询MySQL状态            B6) 重启MySQL服务            B7) 停止MySQL服务                  B8) \033[1;36m启动MySQL服务\033[0m            \033[1;31m┃\033[0m
\033[1;31m┃ \033[1;36m   B9) 修复老版架设繁忙问题    B10) 修改区组名称            B11) 修改配置文件 \033[0m                                               \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\033[0m
\033[1;31m┃\033[0m      \033[1;33m问道相关 \033[0m      \033[1;31m┃\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┣━━━━━━━━━━━━━━━━━━━━━┛\033[0m                                                                                                        \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┃\033[0m \033[1;33m  C1) 启动游戏服务             C2) 关闭游戏服务             C3) 重跑所有线路                   C4) 重启指定线路 \033[0m             \033[1;31m┃\033[0m
\033[1;31m┃\033[0m  \033[1;33m C5) 查询运行状态             C6) 游戏开机自启动           C7) 实时线路状态                   C8) 日志开启关闭             \033[0m \033[1;31m┃\033[0m
\033[1;31m┃                                                                                                                              ┃\033[0m
\033[1;31m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\033[0m
"

}

checkVersion() {
  if [ ! -f $SYSTEM_INFO_FILE_CONFIG_PATH ]; then
    logE "无法确认系统版本！请联系作者QQ275474872!"
    exit 0
  else
    systemInfo="$(cat $SYSTEM_INFO_FILE_CONFIG_PATH)"

    arr=(${systemInfo//""/ })
    verStr="${arr[3]}"
    systemVersionName=${verStr:0:3}

    arr2=(${systemVersionName//"."/ })

    systemVersionCode="${arr2[0]}"

    if [ $systemVersionCode -ne 7 ]; then
      logE "Sorry~ 本脚本仅支持CentOS7.x的系统使用,如需适配请联系Q275474872！"
      exit 0
    fi

  fi
}

#原始的yum源备份路径
readonly YUM_OLD_REPO_BAK_FILE_PATH="/etc/yum.repos.d/CentOS-Base.repo_bak"

#阿里yum源下载地址
readonly YUM_NEW_REPO_ALIYUN_URL="http://mirrors.aliyun.com/repo/Centos-7.repo"

#网易源下载地址
readonly YUM_NEW_REPO_WY_URL="http://mirrors.163.com/.help/CentOS7-Base-163.repo"

#MySQL配置文件地址
readonly MYSQL_CONFIG_FILEPATH="/etc/my.cnf"

#是否开启GM线路 0关闭 1开启
readonly ENABLE_GM_LINE=0

#由外部修改的变量 数据库密码
readonly dbPassword="123456"
readonly dbPort="3306"



readonly basePath="/asktao"

readonly zipFileNmae="asktaoServer1.60.zip"

readonly killPorts=(8101 8120 8110 6101)

readonly killGameLinePort=(8160 8161 8162 )

#由外部修改的变量 SQL脚本路径
readonly asktaoSQLPATH=$basePath/asktao.sql

#系统信息存储的文件目录
readonly SYSTEM_INFO_FILE_CONFIG_PATH="/etc/redhat-release"

#全部系统信息
systemInfo=""

#系统版本 CentOS7.6
systemVersionName=""

#系统版本号 7
systemVersionCode=""

checkVersion

clear

shellOnStart
